home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / dalla rivista / amiga.free / sorgenti vari / wolfedit2 2.0.4 source.sit / WolfEdit2 2.0.4 Source / HexIO.p < prev    next >
Text File  |  1993-09-19  |  1KB  |  64 lines

  1. unit HexIO;
  2.  
  3. interface
  4.  
  5.     type
  6.  
  7.         HexIOResult = (hexioNoErr, hexioBadDigit);
  8.  
  9.     function Hex (x: longint; n: integer): string;
  10.     function Num (s: string; procedure Fail (why: HexIOResult)): longint;
  11.  
  12. implementation
  13.  
  14.     function Hex (x: longint; n: integer): string;
  15.         var
  16.             buf: string[8];
  17.             i, d: integer;
  18.             c: char;
  19.     begin
  20.         buf := '        ';
  21.         for i := 0 to n - 1 do begin
  22.                 d := BAND(x, $F);
  23.                 x := BSR(x, 4);
  24.                 if d < 10 then
  25.                     c := chr(ord('0') + d)
  26.                 else
  27.                     c := chr(ord('A') + d - 10);
  28.                 buf[8 - i] := c;
  29.             end;
  30.         Hex := copy(buf, 9 - n, n);
  31.     end;
  32.  
  33.     function Num (s: string; procedure Fail (why: HexIOResult)): longint;
  34.         var
  35.             p, base: integer;
  36.             c: char;
  37.             n: longint;
  38.     begin
  39.         base := 10;
  40.         if (length(s) > 0) & (s[1] = '$') then begin
  41.                 base := 16;
  42.                 delete(s, 1, 1);
  43.             end;
  44.         n := 0;
  45.         p := 1;
  46.         while p <= length(s) do begin
  47.                 n := n * base;
  48.                 c := s[p];
  49.                 p := p + 1;
  50.                 case c of
  51.                     '0'..'9': 
  52.                         n := n + ord(c) - ord('0');
  53.                     'A'..'F': 
  54.                         n := n + ord(c) - ord('A') + 10;
  55.                     'a'..'f': 
  56.                         n := n + ord(c) - ord('a') + 10;
  57.                     otherwise
  58.                         Fail(hexioBadDigit);
  59.                 end;
  60.             end;
  61.         Num := n;
  62.     end;
  63.  
  64. end.